package com.yunxin.yundubbo.config;

import com.yunxin.yundubbo.interfaces.DubboService;
import com.yunxin.yundubbo.interfaces.EnableDubbo;
import org.springframework.aop.framework.ProxyFactoryBean;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.GenericBeanDefinition;
import org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;
import org.springframework.core.type.filter.AnnotationTypeFilter;

import java.beans.Introspector;
import java.util.Map;


public class DubboProxyRegistrar implements ImportBeanDefinitionRegistrar {

//    @Override
//    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
//
//        Map<String, Object> attributes = importingClassMetadata.getAnnotationAttributes(EnableDubbo.class.getName());
//
//        String[] basePackages = null;
//        if (attributes != null) {
//            basePackages = (String[]) attributes.get("value");
//        }else  {
//            return;
//        }
//        // 用 Spring 的扫描器，只找接口
//        ClassPathScanningCandidateComponentProvider scanner =
//                new ClassPathScanningCandidateComponentProvider(false);
//        // 只匹配标记了 @DubboService 的接口
//        scanner.addIncludeFilter(new AnnotationTypeFilter(DubboService.class));
//        //分路径扫描
//        for (String basePackage : basePackages) {
//            //扫描路径下满足条件的组件，注意此刻还没有创建bean
//            for (BeanDefinition candidate : scanner.findCandidateComponents(basePackage)) {
//                try {
//                    //获取class路径
//                    String className = candidate.getBeanClassName();
//                    if (className==null){
//                        return;
//                    }
//                    //加载class
//                    Class<?> clazz = Class.forName(className);
//
//                    // 只处理接口
//                    if (clazz.isInterface()) {
//                        continue;
//                    }
//                    // 注册为 ProxyFactoryBean
//                    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
//                    beanDefinition.setBeanClass(ProxyFactoryBean.class);
//                    // 用接口名的小写首字母当 bean 名
//                    String beanName = Introspector.decapitalize(clazz.getSimpleName());
//                    registry.registerBeanDefinition(beanName, beanDefinition);
//                } catch (ClassNotFoundException e) {
//                    throw new RuntimeException("无法加载类: " + candidate.getBeanClassName(), e);
//                }
//            }
//        }
//    }
}
